package com.yf.dxapp.module.app.service.appuser;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.yf.dxapp.module.app.controller.admin.appuser.vo.AppUserPageReqVO;
import com.yf.dxapp.module.app.controller.admin.appuser.vo.AppUserSaveReqVO;
import com.yf.dxapp.module.app.dal.dataobject.appuser.AppUserDO;
import jakarta.validation.Valid;

import java.util.List;
import java.util.Set;

/**
 * 用户 Service 接口
 *
 * @author 芋道源码
 */
public interface AppUserService {

    /**
     * 创建用户
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createAppUser(@Valid AppUserSaveReqVO createReqVO);

    /**
     * 更新用户
     *
     * @param updateReqVO 更新信息
     */
    void updateAppUser(@Valid AppUserSaveReqVO updateReqVO);

    /**
     * 删除用户
     *
     * @param id 编号
     */
    void deleteAppUser(Long id);

    /**
     * 获得用户
     *
     * @param id 编号
     * @return 用户
     */
    AppUserDO getAppUser(Long id);

    /**
     * 获得用户分页
     *
     * @param pageReqVO 分页查询
     * @return 用户分页
     */
    PageResult<AppUserDO> getAppUserPage(AppUserPageReqVO pageReqVO);

    /**
     * 手机号注册
     * @param topCode 上级编号/手机号
     * @param phone 手机号
     * @param unionId 微信
     * @param openId 微信
     * @return
     */
    AppUserDO phoneRegister(String topCode,String phone);

    /**
     * 注销账户
     * @param userId 用户id
     * @param reason 注销原因
     */
    boolean signOff(Long userId,String reason);


    List<AppUserDO> finByUserIds(Set<Long> publisherIds);
}